package com.haust.community.utils;

import com.haust.community.pojo.User;
import org.springframework.stereotype.Component;

/**
 * @Auther: csp1999
 * @Date: 2020/11/24/21:14
 * @Description: 持有用户信息, 用于代替 session 对象.
 */
@Component
public class HostHolder {

    /**
     * 每个浏览器访问服务器,都相当于一个线程,在多线程环境下,
     * 我们这里使用 ThreadLocal 来管理多个用户请求的线程,
     * 并保存用户 user 信息到 ThreadLocal 中
     */
    private ThreadLocal<User> users = new ThreadLocal<>();

    /**
     * 在ThreadLocal 中每个线程互相隔离,这样就可以使每个用户请求都单独对应一个线程,
     * 每个线程都单独持有一个用户信息
     */
    public void setUser(User user) {
        users.set(user);
    }

    public User getUser() {
        return users.get();
    }

    public void clear() {
        users.remove();
    }
}
